package cn.xzqwjw.taskmanager.controller.api;

import cn.xzqwjw.taskmanager.service.SysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * @author rush
 */
@RestController
@RequestMapping("/api/role")
@Validated
public class SysRoleController {

  private final SysRoleService sysRoleService;

  @Autowired
  public SysRoleController(SysRoleService sysRoleService) {
    this.sysRoleService = sysRoleService;
  }

  /**
   * 处理 "/api/role" 的 POST 请求，添加角色
   */
  @PostMapping("")
  public String add(
      @NotNull(message = "参数不能为空")
      @RequestBody String paramsJson) {
    return sysRoleService.add(paramsJson);
  }

  /**
   * 处理 "/api/role/{id}" 的 DELETE 请求，删除角色
   */
  @DeleteMapping("/{id:[0-9]+}")
  public String delById(
      @NotNull(message = "id不能为空")
      @Min(value = 1, message = "id必须大于0")
      @PathVariable Integer id) {
    return sysRoleService.delById(id);
  }

  /**
   * 处理 "/api/role" 的 PUT 请求，修改角色信息
   */
  @PutMapping("")
  public String modifyAll(
      @NotNull(message = "参数不能为空")
      @RequestBody String paramsJson) {
    return sysRoleService.modifyAll(paramsJson);
  }

  /**
   * 处理 "/api/role/enabled" 的 PATCH 请求，修改角色启用状态
   */
  @PatchMapping("/enabled")
  public String patchEnabled(
      @NotNull(message = "参数不能为空")
      @RequestBody String paramsJson) {
    return sysRoleService.patchEnabled(paramsJson);
  }

  // ====================查询角色的信息====================

  /**
   * 根据id查询得到某个角色的详细信息
   */
  @GetMapping("/{id:[0-9]+}")
  public String queryById(
      @NotNull(message = "id不能为空")
      @Min(value = 1, message = "id必须大于0")
      @PathVariable Integer id) {
    return sysRoleService.queryById(id);
  }

  /**
   * 查询所有角色列表
   */
  @GetMapping("/list-all")
  public String listAll() {
    return sysRoleService.listAll();
  }

  /**
   * 添加/编辑角色时查询name是否已经使用过
   */
  @GetMapping("/check-name")
  public String checkName(
      @NotBlank(message = "name 不能为空")
      @RequestParam(value = "Name") String name,
      @RequestParam(value = "Id", defaultValue = "0") Integer id) {
    return sysRoleService.checkLabel(name, id);
  }

  /**
   * 添加/编辑角色时查询code是否已经使用过
   */
  @GetMapping("/check-code")
  public String checkCode(
      @NotBlank(message = "code 不能为空")
      @RequestParam(value = "Code") String code,
      @RequestParam(value = "Id", defaultValue = "0") Integer id) {
    return sysRoleService.checkCode(code, id);
  }

}
